package com.blog.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * @author 黄嘉强
 * 定义处理客户端上传文件请求
 * @RestController 用于告诉Spring此类用于处理客户端的请求
 */
@RestController
public class UploadController {
    /**测试用文件夹*/
    // private String uploadDir="D:\\轻工学院\\大三下\\19级实训\\杂项\\uploadImg";
    /**项目文件夹*/
    private String uploadDir="D:\\轻工学院\\大三下\\19级实训\\项目\\blogs\\csblog\\file";

    /**
     * @author 黄嘉强
     * 定义处理文件上传的方法，这个方法可以基于PostMapping注解定义
     *
     * @param picFile 这个要与客户端上传文件时对应的表单属性名相同，其类型必须为MultipartFile。<input type="xxx" name="prcFile">xxx</input>
     * @return 返回值可以为上传成功之后的新文件名
     * @throws IOException
     */
    @PostMapping("/upload")
    public String upload(MultipartFile picFile) throws IOException {
        // 1.修改文件名(只改前缀，不改后缀)
        // 1.1获取原有文件名
        String ofName = picFile.getOriginalFilename();
        // 1.2获取原有文件名的后缀(文件类型)
        String fileSuffix = ofName.substring(ofName.lastIndexOf("."));
        // 1.3构建新的文件名
        String newFileName = UUID.randomUUID() + fileSuffix;

        // 2.完成文件上传
        // 2.1如果存储位置不存在，则创建该目录
        File uploadDirFile = new File(uploadDir);
        if (!uploadDirFile.exists()) {
            uploadDirFile.mkdirs();
        }
        picFile.transferTo(new File(uploadDir, newFileName));

        // 3.返回文件存储地址
        return "/"+newFileName;
    }

    /**
     * @author 黄嘉强
     * 删除文件
     * @param name 要删除的文件名
     * @throws IOException
     */
    @RequestMapping("/remove")
    public String remove(String name) throws IOException {
        // 构建文件对象
        File file = new File(uploadDir, name);
        // 如果文件存在，删除文件
        if (file.exists()) {
            file.delete();
            return "file delete ok.";
        } else {
            return "file not exists";
        }
    }
}
